# insmod(8) completion                                      -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# SPDX-FileCopyrightText: 2024 Emil Velikov <emil.l.velikov@gmail.com>
#
# Formatted using:
# shfmt --language-dialect bash --indent 4 --func-next-line

_insmod()
{
    # long/short opt pairs
    local -A opts=(
        ['force']='f'
        ['force-modversion']=''
        ['force-vermagic']=''
        ['syslog']='s'
        ['verbose']='v'
        ['version']='V'
        ['help']='h'
    )

    local cur="${COMP_WORDS[COMP_CWORD]}"

    if [[ $cur == --* ]]; then
        COMPREPLY=($(compgen -P '--' -W "${!opts[*]}" -- "${cur:2}"))
    elif [[ $cur == -* ]]; then
        if (( ${#cur} != 2 )); then
            COMPREPLY=($(compgen -P '--' -W "${!opts[*]}" -- "${cur:2}"))
        fi
        COMPREPLY+=($(compgen -P '-' -W "${opts[*]}" -- "${cur:1}"))
    else
        # TODO: match only one file
        _filedir '@(ko?(.gz|.xz|.zst))'
        # TODO: add module parameter completion, based of modinfo
    fi
} &&
    complete -F _insmod insmod
